package com.itheima.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.dao.CheckGroupDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.pojo.CheckGroup;
import com.itheima.service.CheckGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.parameters.P;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 检查组的服务提供者
 * @author Gallant
 * @create 2020-06-30 12:05
 */
@Service(interfaceClass = CheckGroupService.class)
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {

    @Autowired
    private CheckGroupDao checkGroupDao;

    // 新增数据
    public void add(CheckGroup checkGroup, Integer[] checkItemIds) {
        // 先将checkGroup添加到t_checkgroup表中
        checkGroupDao.add(checkGroup);
        // 调用往中间表中添加数据的方法,将中间表的信息也完善了
        this.setCheckGroupAndCheckItem(checkGroup.getId(),checkItemIds);
    }

    // 分页查询
    public PageResult queryPage(QueryPageBean queryPageBean) {
        // 获取参数
        Integer currentPage = queryPageBean.getCurrentPage();
        Integer pageSize = queryPageBean.getPageSize();
        String queryString = queryPageBean.getQueryString();
        // 设置分页条件
        PageHelper.startPage(currentPage,pageSize);
        // 调用dao进行查询
        List<CheckGroup> groupList = checkGroupDao.queryPage(queryString);
        PageInfo pageInfo = new PageInfo(groupList);
        return new PageResult(pageInfo.getTotal(),pageInfo.getList());
    }

   // 回显时查询数据
    public CheckGroup findById(Integer id) {
        return checkGroupDao.findById(id);
    }

    @Override
    public List<Integer> findItemIdByGroupId(Integer id) {
        return checkGroupDao.findItemIdByGroupId(id);
    }

    @Override
    public void edit(CheckGroup checkGroup, Integer[] checkItemIds) {
        // 先将检查组的数据更新掉
        checkGroupDao.update(checkGroup);
        // 然后通过检查组的id将关联表里边的检查项删除掉
        checkGroupDao.deleteAssociation(checkGroup.getId());
        // 然后把新的检查项添加进去
        this.setCheckGroupAndCheckItem(checkGroup.getId(),checkItemIds);
    }

    @Override
    public void delete(Integer id) {
        // 根据id先去关联表里边将关联的东西删除掉
        checkGroupDao.deleteAssociation(id);
        // 然后再把自己干掉
        checkGroupDao.deleteCheckGroup(id);
    }

    @Override
    public List<CheckGroup> findAll() {

        return checkGroupDao.findAll();
    }

    // 给中间表添加数据
    public void setCheckGroupAndCheckItem(Integer checkGroupId,Integer[] checkItemIds){
        // 然后将检查项的id遍历出来,封装为一个map集合,之后再往中间表中添加
        if (checkItemIds != null && checkItemIds.length > 0){
            for (Integer checkItemId : checkItemIds) {
                Map<String,Integer> map = new HashMap<>();
                map.put("checkgroup_id",checkGroupId);
                map.put("checkitem_id",checkItemId);
                checkGroupDao.setCheckGroupAndCheckItem(map);
            }
        }

    }
}
